package com.qf.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 拦截器1
 * @author 千锋健哥
 */
public class Interceptor1 implements HandlerInterceptor {

    /**
     * preHandle方法
     * 执行时机: 请求没有进入controller之前执行
     * 使用场景: 拦截请求, 判断是否有权限访问使用
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("====Interceptor1=======preHandle======");

        //如果返回true继续执行后续的方法, 如果返回false则请求被拦截
        return true;
    }

    /**
     * postHandle方法
     * 执行时机: 请求已经进入controller执行了业务, 但是model数据还没有返回给页面的时候执行.
     * 使用场景: 可以在这里统一的处理model中的数据,
     *         例如: 所有方法中都需要加入天气信息, 就可以在这里统一的加入天气信息数据.
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("====Interceptor1=======postHandle======");
    }

    /**
     * afterCompletion方法
     * 执行时机: 请求已经进入controller并且执行完成了controller方法, 数据也返回给页面了
     * 使用场景: 可以打印业务日志.记录用户的行为, 后期给大数据分析推荐使用.
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                Exception ex) throws Exception {
        System.out.println("====Interceptor1=======afterCompletion======");
    }

}
